package jm.nj.demo08mian.demo01;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

/*
 * List接口  extends Collection接口
 *
 * 特点:
 * 1.是一个有序的集合,存储元素和取出元素的顺序
 *               存储:a,b,c  区出a,b,c
 * 2.有索引,查询快
 * 3.可以存储重复的元素
 *
 * List集合特有的方法:包含索引的方法
 *
 *       void add(int index,E element)在列表的指定位置插入指定元素(可选操作).
 *       E get(int index)返回列表中指定位置的元素
 *       E remove (int index)移除指定位置元素
 *       E set(int index,E element) 用指定元素替换列表指定位置元素
 *
 * E:泛型,方法上使用了ArrayList类上的泛型,在创建ArrayList集合的时候泛型的类型
 *
 * 注意:操作索引的时候一定要注意,不要越界异常
 *       IndexOutOfBoundsException:索引越界异常(集合)
 * 			ArrayIndexOutOfBoundsException:数组索引越界异常
 * 			StringIndexOutOfBoundsException:字符串索引越界异常
 *
 * List集合的遍历有3种方式:普通for,增强for,迭代器
 *
 * */
public class Demo01List {
    public static void main(String[] args) {
        //method_01();
        //method_02();
        method_03();
        
    }

    /*
     * E set(int index, E element) 用指定元素替换列表指定位置的元素
     * List<Double>list = new ArrayList<Double>();
     * Double set(int index,Double element)用指定元素替换列表中的位置的元素
     * */
    private static void method_03() {
        List<Double> list = new ArrayList<Double>();
        list.add(1.1);
        list.add(1.2);
        list.add(1.3);
        list.add(1.4);
        System.out.println(list);
        //E set(int index,E element)用指定元素替换列表指定位置的元素
        //1.3-->1.8
        double d = list.set(2, 1.8);
        System.out.println("被替换的元素:"+d);
        System.out.println(list);
    }

    /*
     * E remove(int index) 移除指定索引的元素,并返回被移除的元素
     * List<String>list =new ArrayList<String>();
     * String remove (int index)移除指定索引处的元素,并返回被移除的元素
     * */
    private static void method_02() {
        List<String> list = new ArrayList<String>();
        list.add("张三");
        list.add("张三1");
        list.add("张三2");
        list.add("张三3");
        list.add("张三");
        System.out.println(list);
        String s = list.remove(4);
        System.out.println("被删:" + s);
        System.out.println("---------");
        //使用迭代器遍历集合
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            String e = it.next();
            System.out.println(e);
        }
    }

    /*
     * void add(int index, E element) 在列表的指定位置插入指定元素（可选操作）。
     * E get(int index) 返回列表中指定位置的元素。
     * List<Integer> list = new ArrayList<Integer>();
     * void add(int index, Integer element) 在列表的指定位置插入指定元素（可选操作）。
     * Integer get(int index) 返回列表中指定位置的元素。
     * */
    private static void method_01() {
        List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

        System.out.println("----------");
        //void add (int index,E element)在列表的指定位置插入指定元素
        //往一索引的地方,插入元素2
        list.add(1, 2);
        list.add(4, 8);//已经有0-3索引,所以可以往四插入
        // list.add(6,9);//不能跳过中间的5索引IndexOutOfBoundsException: Index: 6, Size: 5
        for (int i : list) {
            System.out.println(i);
        }


    }
}
